草庐IT

TypeScript 运算符

全部标签

c++ - 为什么 cout << 不能与重载的 * 运算符一起工作?

我正在创建我的第一个类,主要由Overland的C++WithoutFear指导。我让重载的friendostreamoperatorBCDbcd(10);//bcdisinitialisedto10BCDbcd2(15);//bcd2isinitialisedto15cout有关信息,这是我的原型(prototype):BCDoperator*(intz);friendostream&operator据我所知,operator*返回BCD,因此operator 最佳答案 发生的事情是bcd*2正在生成临时BCD,无法绑定(bind

c++ - 在 C++ 中重载 -> 运算符

我看到了这段代码,但我无法理解它的作用:inlineS*O::operator->()const{returnses;//sesisaprivatememberofTypeS*}那么如果我使用->会发生什么? 最佳答案 现在如果你有Oobject;object->whatever()首先会调用重载的operator->,返回存储在对象中的ses,然后是operator->(built-在S*的情况下)将为返回的指针再次调用。所以object->whatever();相当于伪代码:object.ses->whatever();后者当然

c++ - 什么时候使用重载赋值运算符?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:WhatisTheRuleofThree?什么时候需要定义自己的赋值运算符?

c++ - 是否可以编写仅提及特殊复制成员的构造函数赋值运算符?

假设我有N个成员上课。大多数成员都是可复制的。只有一名成员需要手动复制代码。有没有一种方法可以让我只为非标准成员编写代码,让编译器为所有/其他成员生成复制代码? 最佳答案 是的,当然,用用户定义的复制构造函数将您的成员包装在一个单独的类中。对于您正在谈论的类,不要编写用户定义的复制构造函数。例如classMyMemWrapper{definecopyconstructor};classMyClass{member1;member2;...MyMemWrapper}; 关于c++-是否可以

c++ - 为共享指针 move 构造函数和 = 运算符

说,我有一个类:classGameObject///headerfile{....std::shared_ptrtransform;}///cppfile//CopyCtorGameObject::GameObject(constGameObject&rhs):transform(rhs.transform){}//MoveCTorGameObject::GameObject(GameObject&&rhs):transform(std::move(rhs.transform)){}为具有shared_ptr成员变量的类创建move构造函数是否正确?或者我是否需要在move后调用rhs

c++ - 未在排序中使用的对上的重载运算符<

我为pair重载了小于操作,这样我就可以以特定方式对vector进行排序。我希望它根据一对中的第一个键按升序排列,如果第一个键相等,那么我希望它根据第二个键按降序排列。问题是排序函数似乎没有使用重载的运算符,但如果在2对上调用,返回的输出是我所期望的。我在下面附上了一段代码,我正在使用它进行测试:#include#include#includeusingnamespacestd;booloperator&a,pair&b){if(a.firstb.second))returntrue;returnfalse;}intmain(){vector>test{make_pair(1,10),

c++ - C/C++ 编译器是否会对可交换运算符(例如 : +, *)进行重新排序以优化常量

请问第2行下面的代码intbar;intfoo=bar*3*5;优化为intbar;intfoo=bar*15;甚至更多:intfoo=3*bar*5;可以优化吗?目的其实是问我能不能随便写intfoo=bar*3*5;代替intfoo=bar*(3*5);保存括号。(并且减轻了手动操作那些常量排序的需要=>并且在许多情况下,将常量与相关变量分组比将常量分组以进行优化更有意义) 最佳答案 几乎所有的编译器都会对整数执行此操作,因为即使常量折叠可能以不同的方式溢出,标准也可能会忽略溢出,因此他们可以做他们喜欢的事情。如果遵循严格的fl

C++ - 复制赋值运算符被隐式删除

我正在尝试在以下情况下使用复制分配。有两个模板类,listmap和xpair.template>classlistmap{public:usingkey_type=Key;usingmapped_type=Value;usingvalue_type=xpair;//value_type...}templatestructxpair{Firstfirst{};Secondsecond{};xpair(){}xpair(constFirst&first,constSecond&second):first(first),second(second){}};在main.cpp中,我试着写,us

c++ - 重载++运算符在C++中不起作用

有人可以向我解释为什么我的重载++(预版本)没有更新值吗?片段是这样的:circlecircle::operator++(){Area=Area*2.0;return*this;}/////////////////////////////intmain(){classcirclec1(4,1,-1),c2(12,4,6);c1.output();c1++;c1.output();system("pause");return0;} 最佳答案 是因为你重载了前缀调用了后缀。您需要调用++c1;。要使用c1++;,您还需要重载后缀:cir

c++ - 无法在 C++ 中重载 Dot '.' 运算符

我很难理解Stroustrup的解释,如果对“.”进行运算符重载,那么必须面临哪些困难?被允许。请参阅BjarneStroustrup的这句话:Operator.(dot)couldinprinciplebeoverloadedusingthesametechniqueasusedfor->.However,doingsocanleadtoquestionsaboutwhetheranoperationismeantfortheobjectoverloading.oranobjectreferredtoby.Forexample:classY{public:voidf();//...}